package com.gxa.pingan.service;

import com.gxa.pingan.exception.BusinessException;
import com.gxa.pingan.pojo.*;

import javax.servlet.http.HttpServletRequest;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * 订单操作的业务层
 * @author YXQ
 * @date 2021/10/25 19:12
 */
public interface OrderService {
    /**
     * 这是一个添加订单的操作
     * @param map 订单实体
     */
    void addBaseOrder(Map<String,Object> map, HttpServletRequest request) throws BusinessException, IOException;

    /**
     * 在导入订单时,向订单表添加记录
     * @param orderVo 订单的Vo对象
     * @throws BusinessException 异常
     */
    void addImportOrder(OrderVo orderVo) throws BusinessException;

    /**
     * 这是一个查询区域(城市)的操作
     * @return 区域(城市)的集合
     * @throws BusinessException 异常
     */
    List<City> getAreaList() throws BusinessException;

    /**
     * 这是一个选择司机的操作,如果选择了区域名,是一个根据区域名的带条件的查询
     * @param areaName 区域的名字
     * @return 司机的集合(其实只需要司机的姓名?还是司机的实体(这样可以确定司机是谁)?)
     */
    List<Driver> getDriverList(String areaName) throws BusinessException;

    /**
     * 这是一个选择店铺的操作(包括4S店和检测场),如果选择了区域名,是一个根据区域名的带条件的查询
     * @param areaName 区域的名字
     * @param storesType 店铺的类型
     * @return 店铺的集合(名字?or实体?)
     */
    List<Shop> getShopList(String areaName,Integer storesType) throws BusinessException;

    /**
     * 这是一个获取订单状态的接口
     * @return 信息集合
     */
    List<Message> getOrderTypeList() throws BusinessException;

    /**
     * 这是一个获取订单类型的接口
     * @return 信息集合
     */
    List<Message> getTypeList() throws BusinessException;
    /**
     * 获取订单来源的信息的列表
     * @return 订单信息的列表
     */
    List<Message> getOrderSourceList() throws BusinessException;

    /**
     * 获取订单列表的方法
     * @param map 参数列表
     * @return 订单的列表
     */
    List<Order> getOrderList(Map<String, Object> map) throws BusinessException;

    /**
     * 获取全部订单的方法
     * @param map 参数列表
     * @return 全部订单
     * @throws BusinessException 异常
     */
    List<Order> getOrderAllList(Map<String, Object> map) throws BusinessException;

    /**
     * 获取所有已经还车的列表
     * @return 订单的列表
     */
    List<OrderVo> getReturnCarList() throws BusinessException;

    /**
     * 批量删除订单
     * @param deleteIds 订单编号的数组
     */
    void deleteBatchOrder(List<Integer> deleteIds);

    /**
     * 批量导出
     * @param exportIds 导出数据的编号数组
     * @return 订单列表
     */
    List<OrderVo> exportBatchOrderList(List<Integer> exportIds) throws BusinessException;

    /**
     * 获取第三方订单的方法
     * @return 订单列表
     */
    List<OrderVo> getThreeOrderList() throws BusinessException;

    /**
     * 通过订单编号获取订单的详细信息
     * @param orderNum 订单偏好
     * @return 储存订单信息的编号
     */
    Order getOrderAll(String orderNum);
}
